package com.qkjia.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 *
 * http://localhost:8080/springMVC_demo3_war_exploded/test_view
 * Date:2021/9/6
 * author:zhaoqiankun
 * Description:
 * SpringMVC中的视图是View接口，视图的作用渲染数据，将模型Model中的数据展示给用户
 * SpringMVC视图的种类很多，默认有转发视图和重定向视图
 * 当工程引入jstl的依赖，转发视图会自动转换为JstlView
 * 若使用的视图技术为Thymeleaf，在SpringMVC的配置文件中配置了Thymeleaf的视图解析器，由此视
 * 图解析器解析之后所得到的是ThymeleafView
 */
@Controller
public class ViewController {

    /**
     * 当控制器方法中所设置的视图名称没有任何前缀时，此时的视图名称会被SpringMVC配置文件中所配置
     * 的视图解析器解析，视图名称拼接视图前缀和视图后缀所得到的最终路径，会通过转发的方式实现跳转
     * @return success
     */
    @RequestMapping("/testThymeleafView")
    public String testThymeleafView(){
        return "success";
    }

    /**
     * 重定向视图
     * SpringMVC中默认的重定向视图是RedirectView
     * 当控制器方法中所设置的视图名称以"redirect:"为前缀时，创建RedirectView视图，此时的视图名称不
     * 会被SpringMVC配置文件中所配置的视图解析器解析，而是会将前缀"redirect:"去掉，剩余部分作为最
     * 终路径通过重定向的方式实现跳转
     * 例如"redirect:/"，"redirect:/employee"
     * @return testThymeleafView
     */
    @RequestMapping("/testForward")
    public String testForward(){

        return "forward:/testThymeleafView";
    }

    /**
     * 视图控制器view-controller
     * 当控制器方法中，仅仅用来实现页面跳转，即只需要设置视图名称时，可以将处理器方法使用viewcontroller标签进行表示
     * @return
     */
    @RequestMapping("/testRedirect")
    public String testRedirect(){
        return "redirect:/testThymeleafView";
    }

}
